导航菜单

基本原理

自定义提供者依赖注入标准提供者自定义提供者值提供者 (useValue)非类提供者类提供者 (useClass)工厂提供者 (useFactory)别名提供者 (useExisting)非服务提供者导出自定义提供者异步提供者注入实例动态模块简介动态模块实例配置模块示例模块配置实例注入作用域提供者范围使用 (Usage)控制器范围所有请求注入请求提供者性能循环依赖前向引用可选的模块引用(ModuleRef)类模块前向引用模块参考获取实例处理范围提供者注册REQUEST提供者获取当前子树动态实例化自定义类懒加载模块应用上下文ArgumentsHost类当前应用上下文Host处理程序参数执行上下文类反射和元数据生命周期事件生命周期序列生命周期事件使用异步初始化Application Shutdown跨平台一次编译, 各处运行测试安装单元测试测试工具端到端测试(E2E)覆盖全局注册的强化程序测试请求范围实例译者署名自定义提供者

在前面几章中,我们讨论了依赖注入(DI)的各个方面,以及如何在 Nest 中使用它。其中一个例子是基于构造函数的依赖注入,用于将实例(通常是服务提供者)注入到类中。当您了解到依赖注入是以一种基本的方式构建到 Nest 内核中时,您不会感到惊讶。到目前为止,我们只探索了一个主要模式。随着应用程序变得越来越复杂,您可能需要利用 DI 系统的所有特性,因此让我们更详细地研究它们。

依赖注入

依赖注入是一种控制反转(IoC)技术,您可以将依赖的实例化委派给 IoC 容器(在我们的示例中为 NestJS 运行时系统),而不是必须在自己的代码中执行。 让我们从“提供者”一章中检查此示例中发生的情况。

首先,我们定义一个提供者。@Injectable()装饰器将 CatsService 类标记为提供者。

cats.service.ts

import { Injectable } from '@nestjs/common';import { Cat } from './interfaces/cat.interface';@Injectable()export class CatsService { private readonly cats: Cat[] = []; findAll(): Cat[] {return this.cats; }}

然后,我们要求 Nest 将提供程序注入到我们的控制器类中:

cats.controller.ts

import { Controller, Get } from '@nestjs/common';import { CatsService } from './cats.service';import { Cat } from './interfaces/cat.interface';@Controller('cats')export class CatsController { constructor(private readonly catsService: CatsService) {} @Get() async findAll(): Promise {return this.catsService.findAll(); }}

最后,我们在 Nest IoC 容器中注册提供程序

app.module.ts

import { Module } from '@nestjs/common';import { CatsController } from './cats/cats.controller';import { CatsService } from './cats/cats.service';@Module({ controllers: [CatsController], providers: [CatsService],})export class AppModule {}

这个过程有三个关键步骤:

在 cats.service.ts 中 @Injectable() 装饰器

相关推荐: